from flask import Flask, request
from flask_restx import Api, Resource, fields
from models.user import User
from BLL.auth_service import AuthService

# 初始化Flask应用和Swagger
app = Flask(__name__)
api = Api(
    app,
    version='1.0',
    title='微信小程序登录API',
    description='微信小程序登录系统的后端API接口文档',
    doc='/swagger/'  # Swagger文档访问路径
)

# 定义API命名空间
ns = api.namespace('auth', description='认证相关操作')

# 定义请求和响应模型
login_model = api.model('LoginRequest', {
    'code': fields.String(required=True, description='微信登录code')
})

login_response = api.model('LoginResponse', {
    'success': fields.Boolean(description='登录是否成功'),
    'is_new_user': fields.Boolean(description='是否为新用户'),
    'account': fields.String(description='用户账号'),
    'is_admin': fields.Boolean(description='是否为管理员'),
    'message': fields.String(description='返回消息')
})

home_response = api.model('HomeResponse', {
    'success': fields.Boolean(description='请求是否成功'),
    'content': fields.String(description='首页内容'),
    'user_info': fields.Nested(api.model('UserInfo', {
        'account': fields.String(description='用户账号'),
        'is_admin': fields.Boolean(description='是否为管理员')
    }))
})

# 初始化服务
auth_service = AuthService()

@ns.route('/login')
class Login(Resource):
    @ns.doc('用户登录')
    @ns.expect(login_model)
    @ns.marshal_with(login_response)
    def post(self):
        """微信小程序登录接口
        
        通过微信登录code获取用户信息，新用户自动注册
        """
        data = request.json
        return auth_service.login(data.get('code'))

@ns.route('/home')
class Home(Resource):
    @ns.doc('获取首页内容')
    @ns.param('account', '用户账号', _in='query', required=True)
    @ns.marshal_with(home_response)
    def get(self):
        """获取登录后的首页内容
        
        登录成功后显示首页信息
        """
        account = request.args.get('account')
        return auth_service.get_home_content(account)

if __name__ == '__main__':
    # 初始化数据库
    User.init_table()
    # 启动服务
    app.run(host='0.0.0.0', port=5000, debug=True)
